home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 063 < prev    next >
Internet Message Format  |  1997-05-06  |  86KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-063
  3. Date: Thu, 6 Oct 1994 22:52:40 +0100 (MET)
  4.  
  5. C.S.M.P. Digest             Thu, 06 Oct 94       Volume 3 : Issue 63
  6.  
  7. Today's Topics:
  8.  
  9.         <command>+? == PLAIN STUPID!!! (true)
  10.         Apple Events Question
  11.         File System Manager Software Development Kit
  12.         GDGX Graphics Shell bus errors with GX Beta 3...
  13.         Getting Started (Summary)
  14.         Help: idle, shutdown, and MacTCP examples..
  15.         Pascal Flavours for Macintosh
  16.         Q: Script-Independant Command-Keys?
  17.         XCMD memory residence
  18.  
  19.  
  20.  
  21. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  22. (pottier@clipper.ens.fr).
  23.  
  24. The digest is a collection of article threads from the internet newsgroup
  25. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  26. regularly and want an archive of the discussions.  If you don't know what a
  27. newsgroup is, you probably don't have access to it.  Ask your systems
  28. administrator(s) for details.  If you don't have access to news, you may
  29. still be able to post messages to the group by using a mail server like
  30. anon.penet.fi (mail help@anon.penet.fi for more information).
  31.  
  32. Each issue of the digest contains one or more sets of articles (called
  33. threads), with each set corresponding to a 'discussion' of a particular
  34. subject.  The articles are not edited; all articles included in this digest
  35. are in their original posted form (as received by our news server at
  36. nef.ens.fr).  Article threads are not added to the digest until the last
  37. article added to the thread is at least two weeks old (this is to ensure that
  38. the thread is dead before adding it to the digest).  Article threads that
  39. consist of only one message are generally not included in the digest.
  40.  
  41. The digest is officially distributed by two means, by email and ftp.
  42.  
  43. If you want to receive the digest by mail, send email to listserv@ens.fr
  44. with no subject and one of the following commands as body:
  45.     help                        Sends you a summary of commands
  46.     subscribe csmp-digest Your Name    Adds you to the mailing list
  47.     signoff csmp-digest            Removes you from the list
  48. Once you have subscribed, you will automatically receive each new
  49. issue as it is created.
  50.  
  51. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  52. Questions related to the ftp site should be directed to
  53. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  54. digest are available there.
  55.  
  56. Also, the digests are available to WAIS users.  To search back issues
  57. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  58. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  59.  
  60.  
  61. -------------------------------------------------------
  62.  
  63. >From alun@isy.liu.se (Anders Lundqvist)
  64. Subject: <command>+? == PLAIN STUPID!!! (true)
  65. Date: 19 Sep 1994 06:42:44 GMT
  66. Organization: Dept. of E.E., Univ. of Linkoping
  67.  
  68. Greetings all programmers!
  69.  
  70. I wonder how many of you that implement keyboard shortcuts 
  71. like <command>+? realize that these DO NOT work on many 
  72. international keyboard layouts like the swedish????
  73.  
  74. Why? Because in order to produce a question mark I need to 
  75. use the shift key and since the command key disables the shift
  76. key, this doesn't work. I have been playing around with the DA
  77. Keyboard and there's simply no way around. Obiwan uses <command>+`
  78. and this I can emulate by pressing <command>+<option>+<control>+'.
  79. Sigh...
  80.  
  81. Of course, this wouldn't been so bad if there was an equivalent 
  82. meny command, but in many cases there isn't. Usually <command>+?
  83. invokes some help mode and turns the pointer into a question mark
  84. to allow the user to point at an object (e.g Disinfectant and 
  85. Mathematica). 
  86.  
  87. IS THIS PROBLEM MENTIONED IN THE HUMAN INTERFACE GUIDELINES???
  88.  
  89.  
  90. Thank you for any feedback!
  91.  
  92. Anders Lundqvist
  93. Department of EE
  94. Linkoping University
  95. Sweden
  96.   
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. +++++++++++++++++++++++++++
  105.  
  106. >From philip@cs.wits.ac.za (Philip Machanick)
  107. Date: 19 Sep 1994 08:16:47 GMT
  108. Organization: Computer Science Dept, U of Witwatersrand
  109.  
  110. In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  111.  
  112. > Why? Because in order to produce a question mark I need to 
  113. > use the shift key and since the command key disables the shift
  114. > key, this doesn't work.
  115.  
  116. This is also true on the English and US keyboards: "?" is shift-/. Where
  117. did you get the idea that command disables shift? All the modifiers are
  118. independent and can be sensed independently. If COMMAND-? is not working
  119. for you there must be some other explanation.
  120. -- 
  121. Philip Machanick                   philip@cs.wits.ac.za
  122. Department of Computer Science, University of the Witwatersrand
  123. 2050 Wits, South Africa        (at University of Cape Town 4 July-7 Nov)
  124. phone 27(11)716-3309  fax 27(11)339-7965
  125.  
  126. +++++++++++++++++++++++++++
  127.  
  128. >From resnick@uiuc.edu (Pete Resnick)
  129. Date: Mon, 19 Sep 1994 08:35:23 -0500
  130. Organization: University of Illinois at Urbana-Champaign
  131.  
  132. In article <philip-1909941017020001@mackerel.cs.uct.ac.za>,
  133. philip@cs.wits.ac.za (Philip Machanick) wrote:
  134.  
  135. > In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  136. > > Why? Because in order to produce a question mark I need to 
  137. > > use the shift key and since the command key disables the shift
  138. > > key, this doesn't work.
  139. > This is also true on the English and US keyboards: "?" is shift-/. Where
  140. > did you get the idea that command disables shift? All the modifiers are
  141. > independent and can be sensed independently. If COMMAND-? is not working
  142. > for you there must be some other explanation.
  143.  
  144. You're wrong Phil. Command does in fact disable the shift modifier. See
  145. the tech note on International Cancelling. To properly handle the command
  146. key in your application, you should always strip the command-key bit out
  147. of the modifiers field and re-pass the keystroke through KeyTrans. Here's
  148. some source code for doing it with the cancel key, but you should use
  149. similar code for any command-key combination (like in MenuKey):
  150.  
  151. /* These both use Universal Headers. The second is for System 6 too. */
  152.  
  153. Boolean WasCancel(EventRecord *theEvent)
  154. {
  155.     short keyCode;
  156.     long state = 0L, test;
  157.     unsigned long keys;
  158.     
  159.     if(!(theEvent->modifiers & cmdKey))
  160.         return(false);
  161.     keyCode = (theEvent->modifiers & 0xFE00) |
  162.               ((theEvent->message & keyCodeMask) >> 8);
  163.     keys = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache),
  164.                         keyCode, &state);
  165.     return(((Byte)keys == '.') || ((Byte)(keys >>= 16) == '.'));
  166. }
  167.  
  168. Boolean WasCancelSystem6or7(EventRecord *theEvent)
  169. {
  170.     short keyCode, rsrcID, scriptID;
  171.     Ptr kchrPtr;
  172.     Handle kchrRsrc = nil;
  173.     long state = 0L;
  174.     unsigned long keys;
  175.     
  176.     if(!(theEvent->modifiers & cmdKey))
  177.         return(false);
  178.     keyCode = (theEvent->modifiers & 0xFE00) |
  179.               ((theEvent->message & keyCodeMask) >> 8);
  180.     if((kchrPtr = (Ptr)GetScriptManagerVariable(smKCHRCache)) == nil) {
  181.         scriptID = GetScriptManagerVariable(smKeyScript);
  182.         rsrcID = GetScriptVariable(scriptID, smScriptKeys);
  183.         kchrRsrc = GetResource('KCHR', rsrcID);
  184.         if(kchrRsrc != nil)
  185.             kchrPtr = *kchrRsrc;
  186.     }
  187.     if(kchrPtr != nil)
  188.         keys = KeyTranslate(kchrPtr, keyCode, &state);
  189.     if(kchrRsrc != nil)
  190.         ReleaseResource(kchrRsrc);
  191.     return(((Byte)keys == '.') || ((Byte)(keys >>= 16) == '.'));
  192. }
  193. -- 
  194. Pete Resnick    (...so what is a mojo, and why would one be rising?)
  195. Doctoral Student - Philosophy Department, Gregory Hall, UIUC
  196. System manager - Cognitive Science Group, Beckman Institute, UIUC
  197. Internet: resnick@uiuc.edu
  198.  
  199. +++++++++++++++++++++++++++
  200.  
  201. >From alun@isy.liu.se (Anders Lundqvist)
  202. Date: 19 Sep 1994 13:31:07 GMT
  203. Organization: Dept. of E.E., Univ. of Linkoping
  204.  
  205. In article 1909941017020001@mackerel.cs.uct.ac.za, philip@cs.wits.ac.za (Philip Machanick) writes:
  206. >In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  207. >
  208. >> Why? Because in order to produce a question mark I need to 
  209. >> use the shift key and since the command key disables the shift
  210. >> key, this doesn't work.
  211. >
  212. >This is also true on the English and US keyboards: "?" is shift-/. Where
  213. >did you get the idea that command disables shift? All the modifiers are
  214. >independent and can be sensed independently. If COMMAND-? is not working
  215. >for you there must be some other explanation.
  216. >-- 
  217. >Philip Machanick                   philip@cs.wits.ac.za
  218. >Department of Computer Science, University of the Witwatersrand
  219. >2050 Wits, South Africa        (at University of Cape Town 4 July-7 Nov)
  220. >phone 27(11)716-3309  fax 27(11)339-7965
  221.  
  222. I'll try again...
  223.  
  224. On my keybord the "?" is located next to the "0" (zero) key and is 
  225. <shift>+"+". If I use the DA Keyboard and press the shift key then all
  226. letters turn into capital letters and the "+" sign turns into a question 
  227. mark. OK! If I now keep the shift key pressed and press the <command> key
  228. all letter go back to normal and the "?" is transmogrified into a "+" again.
  229.  
  230. Does this happen to you? If it does and you can use <command>+"?" then I'm 
  231. completely lost...
  232.  
  233. Of course, everything works as a charm if I turn on the US keyboard layout.
  234.  
  235.  
  236. Anders Lundqvist
  237. Department of EE
  238. Linkoping University
  239. Sweden
  240.  
  241.  
  242.  
  243. +++++++++++++++++++++++++++
  244.  
  245. >From pcastine@prz.tu-berlin.de (Peter Castine)
  246. Date: Mon, 19 Sep 1994 15:19:45 GMT
  247. Organization: Process Control Center
  248.  
  249. In article <philip-1909941017020001@mackerel.cs.uct.ac.za>,
  250. philip@cs.wits.ac.za (Philip Machanick) wrote:
  251.  
  252. > In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  253. > > Why? Because in order to produce a question mark I need to 
  254. > > use the shift key and since the command key disables the shift
  255. > > key, this doesn't work.
  256. > This is also true on the English and US keyboards: "?" is shift-/. Where
  257. > did you get the idea that command disables shift? All the modifiers are
  258. > independent and can be sensed independently. If COMMAND-? is not working
  259. > for you there must be some other explanation.
  260.  
  261. Anders is right--if the command-shift-anything is pressed, the ASCII code
  262. of the unshifted character is returned in event record. If the programmer
  263. wants to get the shifted character, she needs to reprocess the key code
  264. with the cmdKey bit in the modifiers field reset. This was all discussed
  265. years ago in a Tech Note called ``International Cancelling'', it gave code
  266. for correctly detecting command-period on all keyboards. 
  267.  
  268. Don't ask me where the code is in NIM, I don't know. You can also find the
  269. technique in use in the TCL source.
  270.  
  271. The trick with Mathematica is that, although it tells you to use Cmd-?, it
  272. really is looking for Cmd-/. There is a possibility that, upon finding '/'
  273. in the event record, it checks if both the shift and command keys are
  274. pressed, but that still won't help you if '?' is someplace different from
  275. it's position on the American Sholes (QWERTY) keyboard layout. 
  276.  
  277. Someday I'm gonna write an application that uses Command-Ü (that's
  278. U-Umlaut if you're not reading on a Mac), just to let some people find out
  279. what it feels like.
  280.  
  281. BTW, there is one work-around for Anders problem: switch to the U.S.
  282. keyboard layout, at least when you want to get that nifty ?-cursor. This
  283. is a pain in the neck, but there are a couple of short cuts you can
  284. take--mail me if you want details.
  285.  
  286. -- 
  287. -Peter Castine--pcastine@prz.tu-berlin.de--Process Control Center--TU Berlin-
  288. *  A New York City judge ruled that if two women behind you at the movies   *
  289. *  insist on discussing the probable outcome of the film, you have the      *
  290. *  right to turn around and blow a Bronx cheer at them.                     *
  291.  
  292. +++++++++++++++++++++++++++
  293.  
  294. >From philip@cs.wits.ac.za (Philip Machanick)
  295. Date: 19 Sep 1994 15:01:50 GMT
  296. Organization: Computer Science Dept, U of Witwatersrand
  297.  
  298. In article <35k3qr$28b@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  299.  
  300. > On my keybord the "?" is located next to the "0" (zero) key and is 
  301. > <shift>+"+". If I use the DA Keyboard and press the shift key then all
  302. > letters turn into capital letters and the "+" sign turns into a question 
  303. > mark. OK! If I now keep the shift key pressed and press the <command> key
  304. > all letter go back to normal and the "?" is transmogrified into a "+" again.
  305. > Does this happen to you? If it does and you can use <command>+"?" then I'm 
  306. > completely lost...
  307.  
  308. If I use the DA, the same thing happens yet I can use command-? in MS Word
  309. etc. Maybe Pete Resnick's article throws some light on this but it's not
  310. instantly clear why this should be different for a different keyboard
  311. layout (on the US keyboard on my PB170 "?" is SHIFT-/).
  312. -- 
  313. Philip Machanick                   philip@cs.wits.ac.za
  314. Department of Computer Science, University of the Witwatersrand
  315. 2050 Wits, South Africa        (at University of Cape Town 4 July-7 Nov)
  316. phone 27(11)716-3309  fax 27(11)339-7965
  317.  
  318. +++++++++++++++++++++++++++
  319.  
  320. >From stk@uropax.contrib.de (Stefan Kurth)
  321. Date: 20 Sep 1994 01:36:04 +0200
  322. Organization: none
  323.  
  324. In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se (Anders
  325. Lundqvist) wrote:
  326.  
  327. > I wonder how many of you that implement keyboard shortcuts 
  328. > like <command>+? realize that these DO NOT work on many 
  329. > international keyboard layouts like the swedish????
  330. > Why? Because in order to produce a question mark I need to 
  331. > use the shift key and since the command key disables the shift
  332. > key, this doesn't work.
  333. >
  334. > IS THIS PROBLEM MENTIONED IN THE HUMAN INTERFACE GUIDELINES???
  335.  
  336. It is mentioned in NIM: Text, page C-23. And if all programs were
  337. well-behaved and handled these things like Apple tells us, you would
  338. have no problems.
  339.  
  340. The solution is to strip the cmdKey bit from theEvent.modifiers, and
  341. then run it through KeyTrans() again before passing it to MenuKey().
  342.  
  343. (BTW, I just tried it in Disinfectant, and it works fine for me; and I
  344.  have a German keyboard which I guess is similar to yours.)
  345.  
  346. Actually, some programs don't check for command-? at all, but instead
  347. they check whether the shift key is down, and if it is, they check for
  348. command-/ (because shift-/ yields ? on a US keyboard). Thus, you might
  349. try command-shift-/ on your keyboard and see if it works.
  350.  
  351. Cheers,
  352.   -Stefan
  353.  
  354. ________________________________________________________________________
  355. Stefan Kurth                 Berlin, Germany              stk@contrib.de
  356.  
  357. +++++++++++++++++++++++++++
  358.  
  359. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  360. Date: Tue, 20 Sep 1994 11:30:09 +0800
  361. Organization: Department of Computer Science, The University of Western Australia
  362.  
  363. In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  364.  
  365. >Greetings all programmers!
  366.  
  367. Anders, you think *you've* got problems, us Dvorak keyboards users have to
  368. put up with certain applications (like Photoshop 2.x and BBEdit 3.0 and
  369. certain bits of HC 2.x) where it ignores the command-key table in the KCHR
  370. and decides to use Dvorak command keys instead of QWERTY ones.  Do you
  371. have any idea how annoying it is to hit command-X (to do a Cut) and have
  372. the application quit.  *grrr*
  373. -- 
  374. Quinn "The Eskimo!"        "Kids, 3D and driving just don't mix."
  375.   So many gumbies, so few ICBMs.
  376.   Still using BBEdit 2.3.2.
  377.  
  378. +++++++++++++++++++++++++++
  379.  
  380. >From h+@nada.kth.se (Jon W{tte)
  381. Date: Tue, 20 Sep 1994 10:36:02 +0200
  382. Organization: Royal Institute of Something or other
  383.  
  384. In article <35jbt4$mac@newsy.ifm.liu.se>,
  385. alun@isy.liu.se (Anders Lundqvist) wrote:
  386.  
  387. >IS THIS PROBLEM MENTIONED IN THE HUMAN INTERFACE GUIDELINES???
  388.  
  389. Yes, it is. Applications are suggested only to use letters, and 
  390. where they use non-letters, to do the keyboard translation 
  391. themselves using KeyTrans with the command key stripped off
  392. or something to that effect.
  393.  
  394. The easy thing for a user to do is to extract the Swedish 
  395. keyboard layout in ResEdit and change it to care about shift 
  396. with command down (that's just a simple re-binding)
  397.  
  398. However, you immediately get a new problem; cmd-shift-digit 
  399. means FKEY, and the international shifted numbers aren't the 
  400. same as the US ones (on my keyboard, from 1 through 0, it's:
  401. bang quote hash sun percent ampersand slash leftparen 
  402. rightparen equal, or as you may, potion amulet sink unknown 
  403. food demon wawwnd tool armor ring :-)
  404.  
  405. Now, FoxPro for Macintosh uses cmd-F1 cmd-F2 etc for commands 
  406. that aren't edit commands, so it could be worse (I don't have 
  407. command keys on my keyboard) But then, FPfM says it supports 
  408. the full power of AppleEvents and AppleScripts, when the only 
  409. non-required AE they support is the DoScript one. Lame, and 
  410. misleading.
  411.  
  412. Cheers,
  413.  
  414.                     / h+
  415.  
  416.  
  417. --
  418.   Jon Wätte (h+@nada.kth.se), Hagagatan 1, 113 48 Stockholm, Sweden
  419.  V}ga v{gra nonkonformism!
  420.  
  421.  
  422. +++++++++++++++++++++++++++
  423.  
  424. >From pcastine@prz.tu-berlin.de (Peter Castine)
  425. Date: Tue, 20 Sep 1994 10:00:17 GMT
  426. Organization: Process Control Center
  427.  
  428. In article <35l794$s3j@uropax.contrib.de>, stk@uropax.contrib.de (Stefan
  429. Kurth) wrote:
  430.  
  431. > Actually, some programs don't check for command-? at all, but instead
  432. > they check whether the shift key is down, and if it is, they check for
  433. > command-/ (because shift-/ yields ? on a US keyboard). Thus, you might
  434. > try command-shift-/ on your keyboard and see if it works.
  435.  
  436. The problem is that this won't work if the slash (/) itself is a shift-key
  437. combination as it is, for instance, on the German keyboard (/ == shift-7).
  438.  
  439. So, the only solution for Anders' problem (short of switching to the U.S.
  440. keyboard layout) seems to be to use QuicKeys. Of course, if the command
  441. isn't available in a menu somewhere, he won't have luck with that, either.
  442.  
  443. I sense a moral here: Don't implement command-key shortcuts that *aren't*
  444. available through menus. Hey, if the cmd-key equivalents were for menu
  445. commands, Anders could just tweak the appropriate resources. (Won't work
  446. for MS products, but, hey, nothing works for MS products ;-} ).
  447.  
  448. Cheers
  449.  
  450. -- 
  451. -Peter Castine--pcastine@prz.tu-berlin.de--Process Control Center--TU Berlin-
  452. *  A New York City judge ruled that if two women behind you at the movies   *
  453. *  insist on discussing the probable outcome of the film, you have the      *
  454. *  right to turn around and blow a Bronx cheer at them.                     *
  455.  
  456. +++++++++++++++++++++++++++
  457.  
  458. >From rollin@newton.apple.com (Keith Rollin)
  459. Date: Wed, 21 Sep 1994 04:06:34 -0800
  460. Organization: Apple ][ -> Mac -> Taligent -> Newton -> Windows?
  461.  
  462. In article <35jbt4$mac@newsy.ifm.liu.se>, alun@isy.liu.se wrote:
  463.  
  464. >I wonder how many of you that implement keyboard shortcuts 
  465. >like <command>+? realize that these DO NOT work on many 
  466. >international keyboard layouts like the swedish????
  467.  
  468. FYI, the '?' key is shifted on US layouts, too.
  469.  
  470.  
  471. >
  472. >Why? Because in order to produce a question mark I need to 
  473. >use the shift key and since the command key disables the shift
  474. >key, this doesn't work. I have been playing around with the DA
  475. >Keyboard and there's simply no way around. Obiwan uses <command>+`
  476. >and this I can emulate by pressing <command>+<option>+<control>+'.
  477. >Sigh...
  478. >
  479. >Of course, this wouldn't been so bad if there was an equivalent 
  480. >meny command, but in many cases there isn't. Usually <command>+?
  481. >invokes some help mode and turns the pointer into a question mark
  482. >to allow the user to point at an object (e.g Disinfectant and 
  483. >Mathematica). 
  484. >
  485. >IS THIS PROBLEM MENTIONED IN THE HUMAN INTERFACE GUIDELINES???
  486.  
  487. There's a technote called "International Canceling" that deals with this
  488. issue. It focuses on the fact that '.' is sometimes a shifted character
  489. (the technote cites the Italian keyboard as an example), and shows how to
  490. get around the fact that Shift is ignored when Command is pressed. If
  491. programmers care to get it right, the information is available.
  492.  
  493. - --------------------------------------------------------------------------
  494. Keith Rollin --- Phantom Programmer --- Apple Computer, Inc. --- Team Newton
  495.  
  496. ---------------------------
  497.  
  498. >From westwig@msc.cornell.edu (Erik Anton Westwig)
  499. Subject: Apple Events Question
  500. Date: Wed, 21 Sep 1994 10:11:54 -0500
  501. Organization: Cornell University
  502.  
  503. I'm trying to finally learn about Apple Events, but I'm having some
  504. problems
  505. understanding something quite fundamental:
  506.  
  507. Consider the first required AE: Open Application
  508.   When the Finder starts my App, it calls the Process Manager to launch it
  509.   and then sticks a kAEOpenApplication high-level event into my queue. I
  510.   think I got that part, but because I want my app to be as friendly as
  511.   possible to older systems (without AEs) I wouldn't want to stick ANY code
  512.   in the OpenApp routine that is necessary to the starting of my program.
  513.   I can't see what I would do differently in the OpenApp routine than I
  514.   would do in the non AE environment --> so I guess what I'm saying is I
  515. don't
  516.   understand why this is an important event to support.
  517.   Am I completely missing the whole point here, or what?
  518.  
  519. I think I see how the QuitApp event is different: it gives my App a chance
  520. to
  521. shut down itself gracefully (e.g. asking the user if they want to save open
  522. documents, etc.)
  523.  
  524. Thanks,
  525. ERIK
  526.  
  527. +++++++++++++++++++++++++++
  528.  
  529. >From Jeremy@dewey.soe.berkeley.edu (Jeremy Roschele)
  530. Date: Wed, 21 Sep 1994 08:09:28 -0800
  531. Organization: SimCalc Project
  532.  
  533. In article <westwig-210994101154@132.236.102.71>, westwig@msc.cornell.edu
  534. (Erik Anton Westwig) wrote:
  535.  
  536. >   I can't see what I would do differently in the OpenApp routine than I
  537. >   would do in the non AE environment --> so I guess what I'm saying is I
  538. > don't
  539. >   understand why this is an important event to support.
  540. >   Am I completely missing the whole point here, or what?
  541.  
  542. On the Open Application event you should create a blank document. The
  543. Finder won't send OApp if it is printing, or the user launched with a
  544. document.
  545.  
  546. jeremy
  547.  
  548. +++++++++++++++++++++++++++
  549.  
  550. >From jwbaxter@olympus.net (John W. Baxter)
  551. Date: Wed, 21 Sep 1994 13:26:08 -0700
  552. Organization: Internet for the Olympic Peninsula
  553.  
  554. In article <westwig-210994101154@132.236.102.71>, westwig@msc.cornell.edu
  555. (Erik Anton Westwig) wrote:
  556.  
  557. > I'm trying to finally learn about Apple Events, but I'm having some
  558. > problems
  559. > understanding something quite fundamental:
  560. > Consider the first required AE: Open Application
  561. >   When the Finder starts my App, it calls the Process Manager to launch it
  562. >   and then sticks a kAEOpenApplication high-level event into my queue. I
  563. >   think I got that part, but because I want my app to be as friendly as
  564. >   possible to older systems (without AEs) I wouldn't want to stick ANY code
  565. >   in the OpenApp routine that is necessary to the starting of my program.
  566. >   I can't see what I would do differently in the OpenApp routine than I
  567. >   would do in the non AE environment --> so I guess what I'm saying is I
  568. > don't
  569. >   understand why this is an important event to support.
  570. >   Am I completely missing the whole point here, or what?
  571.  
  572. When your application starts, and realizes that Apple events are active
  573. (all my apps realize that, because I don't write for System 6 any more),
  574. it should do what needs to be done every time it starts up.  None of this
  575. will be visible to a user.
  576.  
  577. When an Open Application event comes in, the app should do what it does
  578. when it is double-clicked on in the Finder.  Often, that is to create and
  579. open a new untitled document...sometimes it isn't.  At one time, Apple
  580. suggested not doing that if an Open Application appears after the app is
  581. happily doing things.  Recently, it seems that Apple may in the future
  582. want the open a new untitled document behavior in that case, as an
  583. "improvement" to the Mac look and feel.  So you probably should just go
  584. ahead and handle Open Application whenever it shows up.
  585.  
  586. When an Open Document comes in before the Open Application, it means that
  587. one or more docs were double-clicked rather than your application. 
  588. Normally, you would open them (assuming that's what your application
  589. does).  Print Document may appear rather than Open Document...this becomes
  590. more important with QuickDraw GX than it was with most users before, since
  591. it's how you find out that a user has dragged one of your docs to a
  592. desktop printer.
  593.  
  594. Another possibility is that an 'ascr'/'noop'  (I think 'noop' is right)
  595. event appears.  Something else will happen later.  Most apps can simple
  596. ignore this event, which says "I'll tell you later why you were started". 
  597. But some apps may need to know.
  598.  
  599.    --John
  600.  
  601. -- 
  602. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  603.    "Occasionally...astronomers add a second to either June 31 or
  604.     December 31..."   IM: OS Utilities, p 4-12
  605.    jwbaxter@pt.olympus.net
  606.  
  607. +++++++++++++++++++++++++++
  608.  
  609. >From westwig@msc.cornell.edu (Erik Anton Westwig)
  610. Date: Wed, 21 Sep 1994 18:35:46 -0500
  611. Organization: Cornell University
  612.  
  613. In article <Jeremy-2109940809280001@now-and-zen.hip.berkeley.edu>,
  614. Jeremy@dewey.soe.berkeley.edu (Jeremy Roschele) wrote:
  615.  
  616. > On the Open Application event you should create a blank document. The
  617. > Finder won't send OApp if it is printing, or the user launched with a
  618. > document.
  619. > jeremy
  620.  
  621. yup, i get that part.  But what I don't see is what I need to do
  622. differently
  623. than before (without the AEs).  To be pre system 7 friendly, I need to be
  624. able
  625. to open my blank document without using the KAEOpenApplication event,
  626. anyway.
  627.  
  628. ERIK
  629.  
  630. +++++++++++++++++++++++++++
  631.  
  632. >From jwbaxter@olympus.net (John W. Baxter)
  633. Date: Wed, 21 Sep 1994 19:42:44 -0700
  634. Organization: Internet for the Olympic Peninsula
  635.  
  636. In article <westwig-210994183547@132.236.102.67>, westwig@msc.cornell.edu
  637. (Erik Anton Westwig) wrote:
  638.  
  639. > In article <Jeremy-2109940809280001@now-and-zen.hip.berkeley.edu>,
  640. > Jeremy@dewey.soe.berkeley.edu (Jeremy Roschele) wrote:
  641. >  
  642. > > On the Open Application event you should create a blank document. The
  643. > > Finder won't send OApp if it is printing, or the user launched with a
  644. > > document.
  645. > > 
  646. > > jeremy
  647. > yup, i get that part.  But what I don't see is what I need to do
  648. > differently
  649. > than before (without the AEs).  To be pre system 7 friendly, I need to be
  650. > able
  651. > to open my blank document without using the KAEOpenApplication event,
  652. > anyway.
  653.  
  654. The sample code in Inside Mac: IAC shows how to detect whether you should
  655. wait for the 'oapp' because it's coming, or not.  I think the discussion
  656. in Think Reference also does.  --John
  657.  
  658. -- 
  659. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  660.    "Occasionally...astronomers add a second to either June 31 or
  661.     December 31..."   IM: OS Utilities, p 4-12
  662.    jwbaxter@pt.olympus.net
  663.  
  664. +++++++++++++++++++++++++++
  665.  
  666. >From h+@nada.kth.se (Jon W{tte)
  667. Date: Thu, 22 Sep 1994 16:11:18 +0200
  668. Organization: Royal Institute of Something or other
  669.  
  670. In article <westwig-210994183547@132.236.102.67>,
  671. westwig@msc.cornell.edu (Erik Anton Westwig) wrote:
  672.  
  673. >yup, i get that part.  But what I don't see is what I need to do
  674. >differently
  675. >than before (without the AEs).  To be pre system 7 friendly, I need to be
  676. >able
  677. >to open my blank document without using the KAEOpenApplication event,
  678. >anyway.
  679.  
  680. Well, the logic goes like this:
  681.  
  682. On startup:
  683.  
  684. if (hasn't got AppleEvents) then
  685.     if (CountAppFiles) then
  686.         Open or Print files
  687.     else
  688.         Make new document
  689. else
  690.     Install AppleEvent Handlers
  691.  
  692.  
  693. on OpenApplication:
  694.     Make new document
  695.  
  696. on OpenDocument:
  697.     Open files
  698.  
  699. on PrintDocument:
  700.     Print files
  701.  
  702.  
  703. As you see, you should separate the actions (opening/printing 
  704. documents or making new documents) from their triggers 
  705. (starting up and/or choosing the menu items)
  706.  
  707. For instance, you wouldn't want your app to create a blank 
  708. document before receiving an open documents appleevent when the 
  709. user double-clicks a document in the Finder under system 7.
  710.  
  711. Cheers,
  712.  
  713.                 / h+
  714.  
  715.  
  716. --
  717.   Jon Wätte (h+@nada.kth.se), Hagagatan 1, 113 48 Stockholm, Sweden
  718.  
  719. "TextEdit does everything right."
  720.     — Jon W{tte
  721.  
  722.  
  723. ---------------------------
  724.  
  725. >From jumplong@aol.com (Jump Long)
  726. Subject: File System Manager Software Development Kit
  727. Date: 15 Sep 1994 00:28:01 -0400
  728. Organization: America Online, Inc. (1-800-827-6364)
  729.  
  730. Apple Developers:
  731.  
  732. The File System Manager Software Development Kit (SDK) version 1.2 is
  733. available on Apple's ftp server at:
  734.  
  735. ftp.apple.com (IP 130.43.2.3)
  736.  
  737. /ftp/dts/mac/sys.soft/extensions/file-system-manager-sdk.hqx
  738.  
  739. The FSM SDK will be on Developer CDs and on AppleLink in the future.
  740.  
  741. Archive Contents
  742. - --------------
  743.  
  744. * File System Manager -- A system extension which implements version 1.2
  745. of FSM and the extended Disk Initialization Package. This extension is
  746. compatible with System 7.0 and later. If in future system software, we
  747. make changes to FSM, the File System Manager extension will disable
  748. itself.
  749.  
  750. * FSMGlueLib.o -- The glue code for the File System Manager service
  751. routines.
  752.  
  753. * FSM.h. FSM.p and FSM.a -- The Universal Interface files for the File
  754. System Manager. This version of the interface files was built to work with
  755. the Universal Interfaces 2.0a1 from ETO #15, MPW prerelease. However, for
  756. 68K development (which we expect all foreign file systems to be), FSM.h
  757. works perfectly with the current release of Universal Interfaces on ETO
  758. #15.
  759.  
  760. * Guide - File System Manager -- The documentation for the File System
  761. Manager in Apple DocViewer format. The latest version of the Apple
  762. DocViewer application can be found on any recent Developer CD.
  763.  
  764. Licensing Information
  765. - -------------------
  766.  
  767. The File System Manager extension version 1.2 may be licensed for
  768. distribution. Contact Apple Software Licensing at:
  769.  
  770.      Software Licensing
  771.      Apple Computer, Inc.
  772.      2420 Ridgepoint Drive, MS: 198-SWL
  773.      Austin, TX  78754
  774.      512 919-2645
  775.      AppleLink: SW.LICENSE
  776.  
  777. The File System Manager Development and Developer Support Team
  778.  
  779. (I told ya we'd make it available when it was done - Jim Luther)
  780.  
  781. +++++++++++++++++++++++++++
  782.  
  783. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  784. Date: Fri, 16 Sep 1994 10:57:22 +0800
  785. Organization: Department of Computer Science, The University of Western Australia
  786.  
  787. In article <358igh$sme@search01.news.aol.com>, jumplong@aol.com (Jump
  788. Long) wrote:
  789.  
  790. >(I told ya we'd make it available when it was done - Jim Luther)
  791.  
  792. (:  Yay Jim!
  793. -- 
  794. Quinn "The Eskimo!"        "Scout in a can. Simple, cheap, easy
  795.                             to use and it's expendable!"
  796.  
  797. +++++++++++++++++++++++++++
  798.  
  799. >From jumplong@aol.com (Jump Long)
  800. Date: 17 Sep 1994 14:57:02 -0400
  801. Organization: America Online, Inc. (1-800-827-6364)
  802.  
  803. In article <rmah-1509940108340001@rmah.dialup.access.net>, rmah@panix.com
  804. (Robert Mah) writes:
  805.  
  806. >Please pardon my ignorance, but I have one question.  What does it do?
  807.  
  808. Here's some meterial cut from the FSM docs which should answer this
  809. question:
  810.  
  811. "The File System Manager is the part of the Macintosh Operating System
  812. that manages the use of foreign file systems. The File System Manager
  813. provides a general means by which foreign file systems can be installed,
  814. identified, and interfaced to the Operating System.
  815.  
  816. The Operating System services provided by the File System Manager are
  817. called FSM components and the interface mechanism between an foreign file
  818. system and a particular FSM component is known as a FSM component
  819. interface. At this time, two FSM component interface are defined for use
  820. under the File System Manager
  821.  
  822. * the HFS Component Interface which allows a foreign file system to
  823. process File Manager requests
  824.  
  825. * the Disk Initialization Package Component Interface which allows foreign
  826. file systems to initialize foreign file system volumes on a Macintosh"
  827.  
  828.  
  829. FSM also includes the File System Utility Routines which help you write a
  830. foreign file system. Here's the description of those utilities:
  831.  
  832. "The File System Utility routines are intended for use by foreign file
  833. systems to allow your foreign file system to
  834.  
  835. * access file control blocks (FCBs), volume control blocks (VCBs), working
  836. directory control blocks (WDCBs), and drive queue elements (DrvQEl)
  837.  
  838. * set and get the default volume and working directory
  839.  
  840. * eject a volume
  841.  
  842. * validate and process parameters passed with Macintosh file system calls
  843.  
  844. * access the Macintosh file system's cache buffers and low-level I/O
  845. services"
  846.  
  847.  
  848. Writing a foreign file system is by no means simple, but we've tried to
  849. make it easier to do a lot  of it.
  850.  
  851. - Jim Luther
  852.  
  853.  
  854. +++++++++++++++++++++++++++
  855.  
  856. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  857. Date: Sun, 18 Sep 1994 22:37:05 +0800
  858. Organization: Department of Computer Science, The University of Western Australia
  859.  
  860. In article <35fe5u$j0m@newsbf01.news.aol.com>, jumplong@aol.com (Jump
  861. Long) wrote:
  862.  
  863. >Writing a foreign file system is by no means simple, but we've tried to
  864. >make it easier to do a lot  of it.
  865.  
  866. So I spent the weekend reading the docs and now I have a question...
  867.  
  868. How do you write an asychronous file system based on a non-block device?
  869. (eg AppleShare)  Presumably you should be using the cache routines because
  870. of this comment...
  871.  
  872. "all calls to most device drivers should be made through the cache routines."
  873.  
  874. (:
  875.  
  876. However the cache routines (eg UTCacheReadIP) seem to imply that they
  877. access the block device driver directly, because they call the
  878. log2PhyProc.  Any ideas?
  879. -- 
  880. Quinn "The Eskimo!"        "Scout in a can. Simple, cheap, easy
  881.                             to use and it's expendable!"
  882.  
  883. +++++++++++++++++++++++++++
  884.  
  885. >From jumplong@aol.com (Jump Long)
  886. Date: 18 Sep 1994 15:43:06 -0400
  887. Organization: America Online, Inc. (1-800-827-6364)
  888.  
  889. In article <quinn-1809942237050001@edu-dynamic5.educ.ecel.uwa.edu.au>,
  890. quinn@cs.uwa.edu.au (Quinn "The Eskimo!") writes:
  891.  
  892. >How do you write an asychronous file system based on a non-block device?
  893. >(eg AppleShare)  Presumably you should be using the cache routines
  894. because
  895. >of this comment...
  896. >
  897. >"all calls to most device drivers should be made through the cache
  898. routines."
  899.  
  900. Here's the answer I gave to a couple of developers during the seed to get
  901. them around this:
  902.  
  903. - ---
  904.  
  905. So, how do you use the cache routines (which are designed to work with
  906. block disk devices) with non-block devices?  You write a very simple block
  907. disk driver - one that supports one writable block.  You'll need a driver
  908. anyway to handle _Control calls with csCode 21 (return physical drive
  909. icon) because the Finder uses that control call.
  910.  
  911. The single block driver is going to be your communications channel between
  912. your FFS, which can only perform block I/O through the cache, and your
  913. non-block driver.  As an example of how this trick works, let's say your
  914. FFS needs to send a command to your WizzyNet driver.
  915.  
  916. First, your FFS needs to get a cache block and associate it with the block
  917. on your simple block driver.  It does this by calling UTGetBlock passing
  918. the volume's volume reference number for the refNum (so the cache code
  919. knows which driver to call), NULL for the log2PhyProc, 0 for the block
  920. number (the only block your driver has), and gbNoRead for the gbOption
  921. (which tells the cache code not to bother reading the block from disk). 
  922. You'll get a pointer back to a 512-byte buffer in the cache.
  923.  
  924. Next, your FFS puts whatever data is wants to send to the block driver (to
  925. send on to the WizzyNet driver) into the cache buffer.  Then, to tell the
  926. cache that the block needs to be sent to the block driver, the FFS calls
  927. UTMarkDirty with the pointer to the cache block. To tell the cache code to
  928. write the block, the FFS calls UTFlushCache.  When the cache code is
  929. called to flush the dirty block to the disk driver, it will call the block
  930. driver to write the cache block.
  931.  
  932. The block driver can then call the WizzyNet driver asynchronously with a
  933. completion routine and then RTS back to the Device Manager.  The Device
  934. Manager will then either return control to the user code or will spin in
  935. the SyncWait loop if the call was made synchronously.
  936.  
  937. When the WizzyNet driver completes the call and the Device Manager calls
  938. the completion routine in the block driver, the block driver will jump to
  939. jIODone, the Device Manager will call the completion routine in the File
  940. Manager's cache code, and the cache code will pass control back through
  941. FSM to the FFS that made the cache call.
  942.  
  943. Finally, when you're done making calls to your driver for this particular
  944. File Manager request, you call UTReleaseBlock to release the block.
  945.  
  946. So, all your block driver needs to handle is _Open, _Close, _Control, and
  947. _Write.  Since it'll never be getting _Read or _Status calls from your
  948. FFS, you can simply return readErr to _Read and statusErr to _Status
  949. requests.  The data your driver is asked to write is going to be the
  950. command or data you want to send to your non-block driver.  You might want
  951. to put a signature long-word in the cache blocks your write so that other
  952. code that mistakenly writes to your driver can be ignored if the signature
  953. isn't there.
  954.  
  955. - ---
  956.  
  957. Yes, that's a hack, but it works and it keeps your foreign file system
  958. from deadlocking the system.  There are a few published foreign file
  959. systems (I won't mention any names) that make synchronous calls to network
  960. drivers which they don't completely own.  Every once in a while, those
  961. file systems deadlock the system because: a) something interrupts while
  962. the driver they call is busy, and b) that code makes an asynchronous File
  963. Manager request and c) if the File Manager isn't busy, it passes the
  964. request on to the foreign file system which d) makes a synchronous call to
  965. the busy driver which causes the system to spin in SyncWait forever (or
  966. until you reset the system or pull the plug).
  967.  
  968. - Jim Luther
  969.  
  970. +++++++++++++++++++++++++++
  971.  
  972. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  973. Date: Mon, 19 Sep 1994 09:42:25 +0800
  974. Organization: Department of Computer Science, The University of Western Australia
  975.  
  976. In article <35i58a$9bi@newsbf01.news.aol.com>, jumplong@aol.com (Jump
  977. Long) wrote:
  978.  
  979. >In article <quinn-1809942237050001@edu-dynamic5.educ.ecel.uwa.edu.au>,
  980. >quinn@cs.uwa.edu.au (Quinn "The Eskimo!") writes:
  981. >
  982. >>How do you write an asychronous file system based on a non-block device?
  983. >
  984. >Yes, that's a hack, but it works [...]
  985.  
  986. Cool.  I figured that the hack would work something like that but it's
  987. nice to know that I'm not missing something obvious.
  988.  
  989. Share and Enjoy.
  990. -- 
  991. Quinn "The Eskimo!"        "Scout in a can. Simple, cheap, easy
  992.                             to use and it's expendable!"
  993.  
  994. +++++++++++++++++++++++++++
  995.  
  996. >From peter.lewis@info.curtin.edu.au (Peter N Lewis)
  997. Date: Tue, 20 Sep 1994 10:13:20 +0800
  998. Organization: NCRPDA, Curtin University
  999.  
  1000. >Cool.  I figured that the hack would work something like that but it's
  1001. >nice to know that I'm not missing something obvious.
  1002.  
  1003. It should be possible to write a generic driver to take the place of that
  1004. block driver, something where the block is formatted like:
  1005.  
  1006. <signature>
  1007. <address to call>
  1008. <generic parameter>
  1009.  
  1010. And have the block driver call the specified address, with a ptr to the
  1011. parameters.  Once we (someone) writes this and makes it available, that
  1012. should be one less chunk we all have to write.  That should work, right?
  1013.    Peter.
  1014. -- 
  1015. Peter N Lewis <peter.lewis@info.curtin.edu.au> - Macintosh TCP fingerpainter
  1016. FTP my programs from redback.cs.uwa.edu.au:Others/PeterLewis/ or
  1017. amug.org:pub/peterlewis/ or nic.switch.ch:software/mac/peterlewis/
  1018.  
  1019. +++++++++++++++++++++++++++
  1020.  
  1021. >From jumplong@aol.com (Jump Long)
  1022. Date: 20 Sep 1994 03:08:06 -0400
  1023. Organization: America Online, Inc. (1-800-827-6364)
  1024.  
  1025. In article <peter.lewis-2009941013200001@rocky.curtin.edu.au>,
  1026. peter.lewis@info.curtin.edu.au (Peter N Lewis) writes:
  1027.  
  1028. >It should be possible to write a generic driver to take the place of
  1029. >that block driver, something where the block is formatted like:
  1030. >
  1031. ><signature>
  1032. ><address to call>
  1033. ><generic parameter>
  1034. >
  1035. >And have the block driver call the specified address, with a ptr to the
  1036. >parameters.  Once we (someone) writes this and makes it available, that
  1037. >should be one less chunk we all have to write.  That should work, right?
  1038.  
  1039. That looks like you're planning on calling <address to call> synchronously
  1040. and that won't work. When the block driver gets a request (either
  1041. asynchronously or synchronously - this method works for both), the block
  1042. driver should:
  1043.  
  1044. 1) Call the network driver asynchronously with a completion routine
  1045. 2) RTS back to the Device Manager
  1046. 3) When the completion routine is executed, jump to ioDone to finish up
  1047. the call.
  1048.  
  1049. The reason it should do it that way is that the network driver could be
  1050. busy. If that's the case, then the request will be queued for execution
  1051. later. The Device Manager will return control to the file system's cache
  1052. code (which called the block driver) and the file system will do one of
  1053. two things: 1) if the original File Manager request was synchronous, it
  1054. will spin in SyncWait until the device request's ioResult field is less
  1055. than or equal to noErr or 2) if the original File Manager request was
  1056. asynchronous, it will return control to the caller.  Either way, when the
  1057. network driver completes its request and the Device Manager calls the
  1058. block driver's completion routine and the block driver calls the File
  1059. Manager's completion routine (or the SyncWait loop code sees ioResult
  1060. change), then control will be returned to the Foreign File System that
  1061. used the cache.
  1062.  
  1063. So, if you're going to write some kind of generic block driver, then you
  1064. should only need to pass it a block with a structure like this:
  1065.  
  1066. enum
  1067. {
  1068.     kReadRequest = 1,
  1069.     kWriteRequest = 2,
  1070.     kControlRequest = 3,
  1071.     kStatusRequest = 4
  1072. };
  1073.  
  1074. struct CallDriverStruct
  1075. {
  1076.     OSType: mySignature; /* the creator type of my foreign file system */
  1077.                          /* to help stop unknown writers */
  1078.     short: callToMake;   /* pass kReadRequest, kWriteRequest, etc. to */
  1079.                          /* tell block driver which driver call to make.
  1080. */
  1081.     ParamBlockRec: pb;   /* parameter block to make driver call with. */
  1082. };
  1083.  
  1084. All of that fits easily into a 512-byte cache block and you don't have to
  1085. worry about the parameter block moving or being reused since cache blocks
  1086. you get with UTGetBlock are yours until you release them (and they don't
  1087. move in memory - ever).
  1088.  
  1089. All of this is off the top of my somewhat sleepy head, so I hope it makes
  1090. sense. If you get something working and want a code review, let me know.
  1091. If I have time, I'll write it...
  1092.  
  1093. - Jim Luther
  1094.  
  1095.  
  1096. +++++++++++++++++++++++++++
  1097.  
  1098. >From benh@fdn.org (Benjamin Herrenschmidt)
  1099. Date: Wed, 21 Sep 94 23:00:53 +0100
  1100. Organization: (none)
  1101.  
  1102. Hi !
  1103.  
  1104. I was away from the usenet for some days (AppleExpo in Paris) and
  1105. i missed the beginning of this thread. The API to the File System
  1106. Manager is available somewhere ? I am interested....
  1107.  
  1108. BenH.
  1109.  
  1110. ---------------------------
  1111.  
  1112. >From gwatts@whcdfo.fnal.gov
  1113. Subject: GDGX Graphics Shell bus errors with GX Beta 3...
  1114. Date: 19 Sep 94 09:17:28 -0600
  1115. Organization: Fermi National Accelerator Lab
  1116.  
  1117. Hi all,
  1118.   I'm trying to teach myself some QDGX graphics this week. :)
  1119.   Short story is I built GDGX Graphics Shell with MW and I get a trashed
  1120. stack ("sc" in Macsbug says my stack pointer is odd!).  The precompiled version
  1121. on the develop CD bombs with a bus error as well.  Details next:
  1122.   I thought I would start by building the QDGX Graphics shell from Develop 15.
  1123. I pulled the source code from develop 19, and I'm using beta 3 of GX (I don't 
  1124. system 7.5 yet, just 7.1).  The app on the disk crashed my mac with a bus error.
  1125. So, I decided to recompile everything.
  1126.   I'm using MW D/4.  First thing I have to do is #define ppcinterfaces in all
  1127. the source files (including the library files!).  Second, the shell sources
  1128. won't compile as is.  There is a routine GXQDGlobalToFixedLocal, for example,
  1129. that doesn't exist in any of the gx .h files.  I replaced it with
  1130. ConvertGXPoint, and used the parent view port of gcontentWindow to get the
  1131. local coords correct.  When creating the "runFeatures" for the styled layout
  1132. shape, the second feather (alternateblahblah) doesn't exist in gx anylonger.
  1133. Is that right?  For the time being, I've just removed it.
  1134.   So, what did I miss.  Do I have to do a #pramga parameters_in_a0 or something
  1135. like that around the gx interfaces?  Why isn't this done automagically, if I
  1136. do have to do it.
  1137.   I only just started last night, so I've not done a detailed step through
  1138. the program yet.  I just figured that others starting out with GX may have
  1139. seen the same thing, and save me some time.  Thought changing the to the
  1140. ConvertQDPoint taught me a bit about viewport coord systems!
  1141.   Any help would be great!  TIA.
  1142.  
  1143.     Cheers,
  1144.         Gordon.
  1145.  
  1146. +++++++++++++++++++++++++++
  1147.  
  1148. >From dkj@apple.com (Dave Johnson)
  1149. Date: Wed, 21 Sep 1994 17:56:24 GMT
  1150. Organization: Apple Computer
  1151.  
  1152. In article <1994Sep19.091728.1@whcdfo.fnal.gov>, gwatts@whcdfo.fnal.gov wrote:
  1153.  
  1154. >   I thought I would start by building the QDGX Graphics shell from Develop 15.
  1155. > I pulled the source code from develop 19, and I'm using beta 3 of GX (I don't 
  1156. > system 7.5 yet, just 7.1).  The app on the disk crashed my mac with a
  1157. bus error.
  1158.  
  1159. The QDGX Shell on the CDs was compiled for, and runs under, beta 1 of GX
  1160. (and without universal interfaces). It was never updated for beta 3,
  1161. unfortunately. The quick and (very) dirty way to get it up and running
  1162. would be to install beta 1 (it's on the issue 15 CD) and use old headers.
  1163. Not recommended.
  1164.  
  1165. > So, I decided to recompile everything.
  1166. >   I'm using MW D/4.  First thing I have to do is #define ppcinterfaces in all
  1167. > the source files (including the library files!).
  1168.  
  1169. It actually might be better to #define it in either a "prefix" file (if
  1170. you're not using precompiled headers) or in a .h file that you include
  1171. before any other headers.
  1172.  
  1173. > Second, the shell sources
  1174. > won't compile as is.  There is a routine GXQDGlobalToFixedLocal, for example,
  1175. > that doesn't exist in any of the gx .h files.  I replaced it with
  1176. > ConvertGXPoint, and used the parent view port of gcontentWindow to get the
  1177. > local coords correct.
  1178.  
  1179. Excellent exercise! :-) That routine went away between beta 1 and beta 3.
  1180.  
  1181. >   So, what did I miss.  Do I have to do a #pramga parameters_in_a0 or
  1182. something
  1183. > like that around the gx interfaces?
  1184.  
  1185. Here's the recommended "prefix" file for MW, most of which came from the GX SDK:
  1186.  
  1187. ///
  1188.  
  1189. #define ppcinterfaces
  1190.  
  1191. #ifndef powerc
  1192.    // The following two typedef's are to work around a bug in the ETO #15
  1193.    // Universal headers -- the headers only typedef float_t and double_t
  1194.    // for "applec" and "powerc".  When this is eventually fixed, these
  1195.    // lines will generate "redefined type" errors.
  1196.  
  1197.    typedef long double float_t;
  1198.    typedef long double double_t;
  1199.  
  1200.    // The following is required if using Metrowerks 68K (CW4).
  1201.    // Otherwise, MetroWerks 68K expects (and uses what it thinks are)
  1202.    // A0 result values instead of D0 ones.
  1203.  
  1204.    #pragma pointers_in_D0     // Required for c-style toolbox glue.
  1205. #endif
  1206.  
  1207. ///
  1208.  
  1209. On the November CDs (Bookmark 20 and Reference Library), the beta 1 GX
  1210. shell will probably be replaced with the "modern" version that comes with
  1211. the SDK (I still have to get buyoff for that, but I don't anticipate any
  1212. problems). It uses the release version of GX, and the code has been
  1213. cleaned up in a big way. Frankly I wouldn't recommend the old one any
  1214. more, except as an "exercise for the reader."
  1215.  
  1216. Have fun!
  1217.  
  1218. Dave Johnson
  1219. Technical Buckstopper
  1220. d e v e l o p
  1221.  
  1222. +++++++++++++++++++++++++++
  1223.  
  1224. >From lalonde@metrowerks.ca (Paul Lalonde)
  1225. Date: Thu, 22 Sep 1994 11:24:47 GMT
  1226. Organization: Metrowerks
  1227.  
  1228. In article <1994Sep19.091728.1@whcdfo.fnal.gov>, gwatts@whcdfo.fnal.gov wrote:
  1229.  
  1230. > Hi all,
  1231. >   I'm trying to teach myself some QDGX graphics this week. :)
  1232. >   Short story is I built GDGX Graphics Shell with MW and I get a trashed
  1233. > stack ("sc" in Macsbug says my stack pointer is odd!).  The precompiled
  1234. version
  1235. > on the develop CD bombs with a bus error as well.  Details next:
  1236. >   I thought I would start by building the QDGX Graphics shell from Develop 15.
  1237. > I pulled the source code from develop 19, and I'm using beta 3 of GX (I don't 
  1238. > system 7.5 yet, just 7.1).  The app on the disk crashed my mac with a
  1239. bus error.
  1240. > So, I decided to recompile everything.
  1241. >   I'm using MW D/4.  First thing I have to do is #define ppcinterfaces in all
  1242. > the source files (including the library files!).  Second, the shell sources
  1243. > won't compile as is.  There is a routine GXQDGlobalToFixedLocal, for example,
  1244. > that doesn't exist in any of the gx .h files.  I replaced it with
  1245. > ConvertGXPoint, and used the parent view port of gcontentWindow to get the
  1246. > local coords correct.  When creating the "runFeatures" for the styled layout
  1247. > shape, the second feather (alternateblahblah) doesn't exist in gx anylonger.
  1248. > Is that right?  For the time being, I've just removed it.
  1249. >   So, what did I miss.  Do I have to do a #pramga parameters_in_a0 or
  1250. something
  1251. > like that around the gx interfaces?  Why isn't this done automagically, if I
  1252. > do have to do it.
  1253. >   I only just started last night, so I've not done a detailed step through
  1254. > the program yet.  I just figured that others starting out with GX may have
  1255. > seen the same thing, and save me some time.  Thought changing the to the
  1256. > ConvertQDPoint taught me a bit about viewport coord systems!
  1257. >   Any help would be great!  TIA.
  1258. >         Cheers,
  1259. >                 Gordon.
  1260.  
  1261. I've been through this problem, and what I did was make myself a precompiled 
  1262. header whose source file included all of the GX headers.  Everything was then 
  1263. wrapped between #pragma parameters_in_d0 and #pragma parameters_in_a0.  Then 
  1264. things started working :)
  1265.  
  1266. You see, contrary to almost the whole Toolbox, the GX graphics routines use 
  1267. the C calling convention.  Problem is, those conventions vary from one compiler 
  1268. to the next.  Hence the need for the #pragma.
  1269.  
  1270. Also, if you're looking for those missing " alternateblahblah" declarations, 
  1271. there's a demo on the develop 17 CD (*not* called "QDGX Graphics shell", 
  1272. though) that puts up the same graphic as the shell on the develop 15 CD, 
  1273. so you can just cut and paste.
  1274.  
  1275. Note:  The headers changed between B1 and B3.  Be sure you're using the right 
  1276. headers for the version you're running.
  1277.  
  1278.  
  1279. Paul Lalonde
  1280. lalonde@metrowerks.ca
  1281.  
  1282. ---------------------------
  1283.  
  1284. >From stone@phoenix.cs.uga.edu (Robert)
  1285. Subject: Getting Started (Summary)
  1286. Date: 17 Sep 1994 23:45:40 GMT
  1287. Organization: kind of sloppy actually....
  1288.  
  1289. Thanks to everyone who sent responses to me.  Here's a compilation of some of
  1290. what I got when I asked about getting started with Macintosh programming for
  1291. around $200.  Hopefully this will prove helpful to others out there who are
  1292. toying with the idea of attempting to learn Mac programming.
  1293.  
  1294.  
  1295. >From Gary M. Greenberg <garyg@UFCC.UFL.EDU>
  1296.  
  1297. Part of what you do should depend on how much _other_ programming
  1298. background you have. Many newbies to the Mac are highly or fairly
  1299. experienced on other platforms. If that's you, then get the biggest,
  1300. baddest, _mostest_ package you can find (maybe even get SC++7.__ and CW
  1301. Gold).
  1302.  
  1303. On the other hand, if you're like me and you have no (zero) former
  1304. programming experience, _and_ you're teaching yourself rather than studying
  1305. CS at a university, then any ANSI C compiler and good books will be fine.
  1306.  
  1307. I've been teaching myself how to code for a few months but I've only had a
  1308. few actual weeks of time to spend working at it. Still, I've gotten through
  1309. 7 chapters of the Waite Group's C Primer Plus, and I'm concurrently reading
  1310. K&R's The C Programming Language, 2nd Edition. I'm also chipping away at a
  1311. new book called Symantec C++ Programming for the Macintosh (with Diskette
  1312. for about $35.00). I bought SC++6.0 for $50.00 and got the free upgrades
  1313. from the SC FTP site. I'm sure that the OO Libraries are about 6-12 months
  1314. beyond my reach given the limited time I can invest in learning right now,
  1315. but I expect a geometric progression -- you should too.
  1316.  
  1317. I've spent more on books than any other resource. The books on CD are okay
  1318. if that is all money will permit, but you'll become hungry for the paper
  1319. soon, as too much screen time weakens one's concentration. I've used them
  1320. enough to know. And, I now subscribe to MacTech and Develop. I've written
  1321. some very small _useless_ programs/exercises (and had fun each minute
  1322. making them work) so my method is having a positive result. Books, source
  1323. code, following c.s.m.p. and a.s.m. (that's alt.sources.mac) and lots of
  1324. keystrokin' is what will bring it all together for you and the tool you
  1325. choose (the brand of programming environment) will be less important.
  1326. You'll see lots of passionate hooey about all the brands. Each has lovers
  1327. and haters (I personally can't wait til my skills become sharp enough that
  1328. I feel comfortable tackling Smalltalk) but they are only _tools_.
  1329.  
  1330. I firmly believe that after you are successful at learning a language,
  1331. you'll move around and experiment with many different types of tools. So,
  1332. $200 [hey, I made it back to your topic ;-) ] is a comfortable starting
  1333. point ...
  1334. yet, it's just that ... a starting point.
  1335.  
  1336.  
  1337. >From Tim Dixon  <tdixon@css.tayloru.edu>
  1338.  
  1339. If you're a student (or perhaps faculty, I don't know) CodeWarrior Gold is
  1340. available at the educational price of $99.  Call 1-800-377-5416 for details.
  1341.  
  1342. [Regarding having a friend who's a student order for you:]
  1343.  
  1344. That should work.  A friend and I placed our orders at the same time.  We
  1345. had to place separate orders, but they let us both use his credit card (I
  1346. don't have one so I paid him by check).  They'll also accept a check.
  1347.  
  1348.  
  1349. >From Peter S. Lau:
  1350.  
  1351. well, CodeWarrier is quiet good, and you can tell by the recent
  1352. created and active newsgroup comp.sys.mac.programmer.codewarrier.  I
  1353. think $99 to get the compiler (actually 3 compilers C, C++, and
  1354. Pascal), plus tools, plus class library is definitely a bargain.  I
  1355. have used the demo version in Thomson's book.  I feel quiet
  1356. comfortable with it.
  1357.  
  1358. A few third-party books are good, too.  "Macintosh Programming Secrets" 2nd
  1359. edition is good.  I found it a bit wordy, but the examples are practical, so
  1360. that's the good part.  You might want to check the library.
  1361.  
  1362.  
  1363. >From Robert B. Schmunk <pcrxs@nasagiss.giss.nasa.gov>
  1364.  
  1365. The develop Bookmark CD no longer contains all the NIM books, but if you
  1366. request a copy of issue #17 (backissues cost about $10), I understand that
  1367. all that had been released before spring 1994 they're all on that one. To
  1368. get the newer ones, you'll need to subscribe, which is something like $37
  1369. for four issues. Supposedly, Addison-Wesley will be publishing a CD sometime
  1370. in the next couple months which contains nothing but a complete NIM (the
  1371. Bookmark CD contains lots more), and the street price will supposedly be
  1372. around $99.
  1373.  
  1374.  
  1375. >From Eric Drumbor <ericd@netcom.com>
  1376.  
  1377.      I would check around for used books.  I purchased volumes 1-6, the 
  1378. X-Reference, and a book on the Communications Toolbox (this was all from 
  1379. the old series) for $30.  The CDs are nice to have, but it's much easier 
  1380. to have a book to use as a reference.
  1381.  
  1382.      I don't know what you have as far as beginners programming books (if 
  1383. you actually need them), but I would recommend either Learn C on the 
  1384. Macintosh and The C Programming Primer from Dave Mark, or Think THINK C 
  1385. by Dan Parks Sydow (Sydow has also written another "intermediate" book 
  1386. that explains more about the Macintosh Toolbox commands).  Mark's books 
  1387. are fairly good, but I think Sydow has a better understanding on how to 
  1388. teach and what needs to be explained.
  1389.  
  1390.      What I've suggested goes over the $200 mark, but I'd recommend that 
  1391. you get Code Warrior and some kind of C book before you get a Develop 
  1392. subscription.  I've spent over $600 in books alone, and I'm still waiting 
  1393. for my next paycheck to buy some more.  Hope this helps..good luck!
  1394.  
  1395.  
  1396.  
  1397. @@@@@ Robert Stone (stone@phoenix.cs.uga.edu)
  1398. @@@@@ Some Sort of Computer-Related Person, UGA - Extension Dairy Sci.
  1399. @@@@@ I am not responsible for anything I might say.
  1400.  
  1401.  
  1402. +++++++++++++++++++++++++++
  1403.  
  1404. >From kenlong@netcom.com (Ken Long)
  1405. Date: Mon, 19 Sep 1994 04:04:17 GMT
  1406. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1407.  
  1408. If someone wanted to program on the Mac and had minimal finances, and 
  1409. could only afford a used Think C package, then what could they get to 
  1410. learn more?
  1411.  
  1412. Kernighan on C - a big text (w.p.) document by Brian Kernigan on the C 
  1413. language, SpInside Mac, and as much example source as could be found and 
  1414. downloaded.  The books are all expensive and many only give you example 
  1415. code and a book full of comments.  Some have useful info not found in 
  1416. example code, but is it absolutely necessary for the price?
  1417.  
  1418. I've found few source examples in books (or on the extra disks you'd buy) 
  1419. that did not have similar or identical example sources somewhere in 
  1420. cyberspace.  And there are a LOT more examples in cyberspace that you'd 
  1421. not see in any bought book.
  1422.  
  1423. I'm not against buying programming books - especially IM.  I've got 
  1424. plenty of money tied up in them!  But if you don't have any money, 
  1425. example source and SpInside Mac is your route.  As far as value in 
  1426. programmer training, I'd say IM, example source and programmer message 
  1427. forums are far superior than Mac programming books.  Think C 5's Standard 
  1428. Libraries manual was a real close second to K&R's.
  1429.  
  1430. -Ken-
  1431.  
  1432. +++++++++++++++++++++++++++
  1433.  
  1434. >From Clay Thurmond <claytex@panix.com>
  1435. Date: 19 Sep 1994 04:45:00 GMT
  1436. Organization: TVMHS
  1437.  
  1438. In article <kenlongCwCzB5.Bsz@netcom.com> Ken Long, kenlong@netcom.com
  1439. writes:
  1440. >Kernighan on C - a big text (w.p.) document by Brian Kernigan on the C 
  1441. >language, SpInside Mac, and as much example source as could be found and 
  1442. >downloaded.  The books are all expensive and many only give you example 
  1443. >code and a book full of comments.  Some have useful info not found in 
  1444. >example code, but is it absolutely necessary for the price?
  1445.  
  1446. I've heard of this Spinside Mac a number of times, but I've never been
  1447. able to find it.  Archie comes up dry.  I haven't been able to locate it
  1448. on ftp.apple.com either.  Any idea where it is exactly?  Also, is this
  1449. Kernighan document available on the net?
  1450.  
  1451. Thanks,
  1452. Clay
  1453.  
  1454. +++++++++++++++++++++++++++
  1455.  
  1456. >From jwbaxter@olympus.net (John W. Baxter)
  1457. Date: Mon, 19 Sep 1994 12:05:37 -0700
  1458. Organization: Internet for the Olympic Peninsula
  1459.  
  1460. In article <35j50c$o1v@news.panix.com>, Clay Thurmond <claytex@panix.com> wrote:
  1461.  
  1462. > In article <kenlongCwCzB5.Bsz@netcom.com> Ken Long, kenlong@netcom.com
  1463. > writes:
  1464. > >Kernighan on C - a big text (w.p.) document by Brian Kernigan on the C 
  1465. > >language, SpInside Mac, and as much example source as could be found and 
  1466. > >downloaded.  The books are all expensive and many only give you example 
  1467. > >code and a book full of comments.  Some have useful info not found in 
  1468. > >example code, but is it absolutely necessary for the price?
  1469. > I've heard of this Spinside Mac a number of times, but I've never been
  1470. > able to find it.
  1471.  
  1472. SpInside Mac is a monster Hypercard stack (with bunches of supporting
  1473. files).  That in itself isn't so bad, but...SpInside Mac is also very
  1474. obsolete (roughly speaking, it is part way between volumes I through V and
  1475. volume VI, with some extras).
  1476.  
  1477. I've ignored it on the last couple of years of CDs it has come on, and
  1478. never looked for it on the net.  --John
  1479.  
  1480. -- 
  1481. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  1482.    "Occasionally...astronomers add a second to either June 31 or
  1483.     December 31..."   IM: OS Utilities, p 4-12
  1484.    jwbaxter@pt.olympus.net
  1485.  
  1486. +++++++++++++++++++++++++++
  1487.  
  1488. >From d_spacey@icrf.icnet.uk (Dylan the Hippy Wabbit)
  1489. Date: Wed, 21 Sep 1994 15:31:11 -0500
  1490. Organization: Imperial Cancer Research Fund
  1491.  
  1492. In article <35j50c$o1v@news.panix.com>, Clay Thurmond <claytex@panix.com>
  1493. wrote:
  1494.  
  1495.  
  1496. > I've heard of this Spinside Mac a number of times, but I've never been
  1497. > able to find it.  Archie comes up dry.  I haven't been able to locate it
  1498. > on ftp.apple.com either.  Any idea where it is exactly?  Also, is this
  1499. > Kernighan document available on the net?
  1500. > Thanks,
  1501. > Clay
  1502.  
  1503. Ftp to ftp.apple.com, I'm afraid I don't remember the directory name. 
  1504. Alternatively use http://dts.apple.com if you have a web browser.  Either
  1505. way be warned about the time/disk space requirements.  There are eight
  1506. parts taking up 7 1/2 meg.  Being multipart you will need unstuffit rather
  1507. than stuffit expander.
  1508.  
  1509. Once you've got it you'll find it's like learning a language from a
  1510. French/English dictionary.  I've been scratching my head over the thing all
  1511. year.
  1512.  
  1513. Dave Spacey
  1514.  
  1515. -- 
  1516. Don't underestimate the abacus......it requires no power, can be made with
  1517. any materials you have to hand, and never goes bing in the middle of an
  1518. important piece of work.   (Many thanks to Douglas Adams.)
  1519.  
  1520. +++++++++++++++++++++++++++
  1521.  
  1522. >From s.fraser@ic.ac.uk (Simon Fraser)
  1523. Date: Wed, 21 Sep 94 19:52:09 BST
  1524. Organization: Centre for Population Biology, Imperial College, UK.
  1525.  
  1526. In article <35j50c$o1v@news.panix.com> Clay Thurmond, claytex@panix.com
  1527. writes:
  1528. >I've heard of this Spinside Mac a number of times, but I've never been
  1529. >able to find it.  Archie comes up dry.  I haven't been able to locate it
  1530. >on ftp.apple.com either.  Any idea where it is exactly?  Also, is this
  1531.  
  1532. OK, here it is!
  1533.  
  1534. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt1.hqx
  1535. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt2.hqx
  1536. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt3.hqx
  1537. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt4.hqx
  1538. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt5.hqx
  1539. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt6.hqx
  1540. ftp.apple.com:dts/mac/docs/stacks/spinside/spinside-mac-4-0-2-pt7.hqx
  1541.  
  1542. The whole lot uncompresses into a 10.8Mb folder.
  1543. I find it really useful (well, more so before I started to buy the
  1544. new Inside Macintosh books (you'll see them referred to as NIM: Text
  1545. for example).
  1546. Stretching out the Hypercard stack to the height of a 14" monitor
  1547. makes it a lot easier as well. I did this by a combination of
  1548. 'set the userlevel to 5' in the message box, and having a new, 
  1549. unprotected stack open at the same time, which enabled me to get
  1550. at the tool palette.
  1551.  
  1552. You might also find the technotes stack useful-- 5.9 Mb worth!
  1553.  
  1554. ftp.apple.com:dts/mac/docs/stacks/tnstack/tech-notes-stack-4-0-4-pt1.hqx
  1555. ftp.apple.com:dts/mac/docs/stacks/tnstack/tech-notes-stack-4-0-4-pt2.hqx
  1556. ftp.apple.com:dts/mac/docs/stacks/tnstack/tech-notes-stack-4-0-4-pt3.hqx
  1557. ftp.apple.com:dts/mac/docs/stacks/tnstack/tech-notes-stack-4-0-4-pt4.hqx
  1558. ftp.apple.com:dts/mac/docs/stacks/tnstack/tech-notes-stack-4-0-4-pt5.hqx
  1559.  
  1560. Hope this helps!
  1561.  
  1562. Simon
  1563. P.S. the best time to access files of this size of off-peak at a weekend.
  1564. It's dead fast early on a Sunday morning from the UK!
  1565. __________________________________________________________________________
  1566. Simon Fraser                            NERC Centre for Population Biology
  1567. s.fraser@ic.ac.uk                         Imperial College at Silwood Park
  1568.                                              Ascot, Berkshire, SL5 7PY. UK
  1569.  
  1570. ---------------------------
  1571.  
  1572. >From beltoft@icaen.uiowa.edu (Brian S Eltoft)
  1573. Subject: Help: idle, shutdown, and MacTCP examples..
  1574. Date: 19 Sep 1994 13:31:21 GMT
  1575. Organization: Iowa Computer Aided Engineering Network
  1576.  
  1577.  
  1578. I'm looking for source code that shows how you would write a program to 
  1579. sense that the mac has been idle for sometime... as well as an example 
  1580. of a safe shutdown (as if I'm using the shutdown from the special menu).
  1581. I tried the example found in Inside Mac, but it gives me an error of 
  1582. -609 when I try the AESend(..)  I was also looking about for some examples
  1583. of MacTCP...  something that would do a finger...
  1584.  
  1585. If anyone has any info on where to look for this code could you please mail
  1586. it to: beltoft@icaen.uiowa.edu
  1587.  
  1588. -- 
  1589. Brian Eltoft   
  1590. Email:  beltoft@icaen.uiowa.edu
  1591.  
  1592. +++++++++++++++++++++++++++
  1593.  
  1594. >From brook@psy.uwa.edu.au (Brook )
  1595. Date: 19 Sep 1994 23:28:43 GMT
  1596. Organization: The University of Western Australia
  1597.  
  1598. beltoft@icaen.uiowa.edu (Brian S Eltoft) writes:
  1599.  
  1600.  
  1601. >I'm looking for source code that shows how you would write a program to 
  1602. >sense that the mac has been idle for sometime... as well as an example 
  1603. >of a safe shutdown (as if I'm using the shutdown from the special menu).
  1604. >I tried the example found in Inside Mac, but it gives me an error of 
  1605. >-609 when I try the AESend(..)  I was also looking about for some examples
  1606. >of MacTCP...  something that would do a finger...
  1607.  
  1608.  The following function is a correction to the one shown in IM:Processes
  1609. and works for me.                             
  1610. FUNCTION ShutDownSafely : OSErr
  1611. CONST
  1612.     kFinderSig = 'MACS'
  1613. VAR
  1614.     myErr:        OSErr;
  1615.     finderAddr:    AEDesc;
  1616.     myShutDown:    AppleEvent;
  1617.     nilReply:        AppleEvent;
  1618.     signature:    OSType;
  1619. BEGIN
  1620.     signature := kFinderSig;
  1621.     myErr := AECreateDesc ( typeApplSignature,
  1622.                             @signature,SizeOf(OSType),
  1623.                             finderAddr);
  1624.     IF myErr = noErr THEN
  1625.         myErr := AECreateAppleEvent ( kAEFinderEvents,
  1626.                     kAEShutDown,finderAddr,
  1627.                     kAutoGenerateReturnID,
  1628.                     AnyTransactionID,myShutDown);
  1629.     IF myErr = noErr THEN
  1630.         myErr := AESend ( myShutDown,nilReply,
  1631.                     kAENoreply + kAECanSwitchLayer
  1632.                     + kAEAlwaysInteract,
  1633.                     kAENormalPriority,
  1634.                     kAEDefaultTimeOut,nil,nil);
  1635.     ShutDownSafely := myErr;
  1636. END;
  1637.  
  1638. --
  1639. Brooklyn Waters (Senior Programmer)    email: brook@psy.uwa.edu.au
  1640. Centre for Computer Managed Training and Decision Support Systems
  1641. The University of Western Australia    Tel: +61-9-3803637
  1642. NEDLANDS WA 6009   AUSTRALIA           FAX: +61-9-3801006
  1643.  
  1644. +++++++++++++++++++++++++++
  1645.  
  1646. >From David_Seale@magic.ca (David Seale)
  1647. Date: 21 Sep 1994 22:08:32 GMT
  1648. Organization: Magic Online Services Toronto Inc.
  1649.  
  1650. "I'm looking for source code that shows how you would write a program to 
  1651. sense that the mac has been idle for sometime... as well as an example 
  1652. of a safe shutdown (as if I'm using the shutdown from the special menu).
  1653. I tried the example found in Inside Mac, but it gives me an error of 
  1654. -609 when I try the AESend(..)"
  1655.  
  1656. I seem to remember that the -609 error is because the example in IM:Processes
  1657. is wrong.
  1658. I think that the solution is to change the Finder signature to 'MACS',
  1659. instead of 'FNDR' or whatever they have.
  1660. If that doesn't work, use the process manager to look for the Finder, and
  1661. then use the ProcessSerialNumber version of the AE (That's what I did).
  1662.  
  1663. The idle thing is not as hard as it sounds. I used a timer task to check to
  1664. see if any of the keys were down on the keyboard (using GetKeys), and if the
  1665. mouse was still in the same position, works very well.
  1666.  
  1667. Hope this is helpful (and that I'm not confused again).
  1668.  
  1669. Dave.
  1670. david_seale@magic.ca
  1671.  
  1672.  
  1673. ---------------------------
  1674.  
  1675. >From fehrst@herald.usask.ca (Stuart Fehr)
  1676. Subject: Pascal Flavours for Macintosh
  1677. Date: 19 Sep 1994 19:16:07 GMT
  1678. Organization: University of Saskatchewan
  1679.  
  1680. Our campus bookstore sells two Pascal for Macintosh software packages.  
  1681. They are:  Think Pascal by Symantec, and Pascal for the Macintosh, also 
  1682. by Symantec.
  1683.  
  1684. What are the differences?  Or, maybe I should ask, what is Pascal for the 
  1685. Macintosh?  I haven't read or heard anything about it at all.  I have 
  1686. been reading the posts on Think Pascal, but have seen no mention of this 
  1687. other one.
  1688.  
  1689. There is a significant price difference too -- Pascal for the Macintosh 
  1690. is approx. $20.00 more than think Pascal.
  1691.  
  1692. Any suggestions or information would be appreciated.
  1693.  
  1694. +++++++++++++++++++++++++++
  1695.  
  1696. >From peter.lewis@info.curtin.edu.au (Peter N Lewis)
  1697. Date: Wed, 21 Sep 1994 10:40:25 +0800
  1698. Organization: NCRPDA, Curtin University
  1699.  
  1700. In article <35ko1n$5b8@tribune.usask.ca>, fehrst@herald.usask.ca (Stuart
  1701. Fehr) wrote:
  1702.  
  1703. >Our campus bookstore sells two Pascal for Macintosh software packages.  
  1704. >They are:  Think Pascal by Symantec, and Pascal for the Macintosh, also 
  1705. >by Symantec.
  1706.  
  1707. No idea.  Symantec used to (and may still do) sell a Juse Enough Pascal
  1708. which was a education tool or something, I'm not sure.
  1709.  
  1710. Pascal Compilers:
  1711.  
  1712. THINK Pascal 4.0.2
  1713. Object Pascal.  68k only.  Very nice environment.  Basically bug free, but
  1714. the program is dead (it will likely never be updated) and is growing
  1715. incompatiblities with each new system version.
  1716.  
  1717. Metrowerks CodeWarrior Pascal
  1718. No Objects (scheduled for the end of the year).  Native & 68k, both are
  1719. still in development and are not bug free.  Quite nice environment, also
  1720. still in development.  Not quite production quality as yet, but this
  1721. program is getting being worked on full time by Metrowerks, and will
  1722. almost certainly be the Pascal compiler to choose after the end of the
  1723. year.
  1724.  
  1725. Language Systems Pascal
  1726. Object Pascal.  Native (& 68k?).  Still in beta, I dont know how solid it
  1727. is.  MPW evironment only, so not really suitable for education/lab use if
  1728. you want a friendly environment.
  1729.  
  1730. MPW Pascal
  1731. Object Pascal.  68K only.  Free from serious bugs.  Doesn't cut it for a
  1732. standalone project when compared to Think Pascal but useful when you need
  1733. to build something strange (INITs, DRVRs, etc).
  1734.  
  1735. Enjoy,
  1736.    Peter.
  1737. -- 
  1738. Peter N Lewis <peter.lewis@info.curtin.edu.au> - Macintosh TCP fingerpainter
  1739. FTP my programs from redback.cs.uwa.edu.au:Others/PeterLewis/ or
  1740. amug.org:pub/peterlewis/ or nic.switch.ch:software/mac/peterlewis/
  1741.  
  1742. ---------------------------
  1743.  
  1744. >From bb@lightside.com (Bob Bradley)
  1745. Subject: Q: Script-Independant Command-Keys?
  1746. Date: Sun, 18 Sep 1994 10:54:40 -0800
  1747. Organization: SS Software Inc.
  1748.  
  1749. I have a simple dialog for "Don't Save, "Cancel", "Save" and want to
  1750. handle commands keys for the dialog correctly. Right now, I'm just
  1751. checking for 'D', Escape or Command Period (I am doing international
  1752. canceling), and Return or Enter, respectively but, I know there's a better
  1753. way.
  1754.  
  1755. I'd like to make the code localizable and to also get rid of data (the raw
  1756. 'D' letter, etc..) from the source code (so I don't have t re-compile to
  1757. change it).
  1758.  
  1759. How would I go about this? I assume it would all be thru the use of the
  1760. Script Manager but, I'm not sure on the implementation.
  1761.  
  1762. +++++++++++++++++++++++++++
  1763.  
  1764. >From resnick@uiuc.edu (Pete Resnick)
  1765. Date: Mon, 19 Sep 1994 23:38:05 -0500
  1766. Organization: University of Illinois at Urbana-Champaign
  1767.  
  1768. In article <bb-1809941054400001@user53.lightside.com>, bb@lightside.com
  1769. (Bob Bradley) wrote:
  1770.  
  1771. > I have a simple dialog for "Don't Save, "Cancel", "Save" and want to
  1772. > handle commands keys for the dialog correctly. Right now, I'm just
  1773. > checking for 'D', Escape or Command Period (I am doing international
  1774. > canceling), and Return or Enter, respectively but, I know there's a better
  1775. > way.
  1776. > I'd like to make the code localizable and to also get rid of data (the raw
  1777. > 'D' letter, etc..) from the source code (so I don't have t re-compile to
  1778. > change it).
  1779. > How would I go about this? I assume it would all be thru the use of the
  1780. > Script Manager but, I'm not sure on the implementation.
  1781.  
  1782. For single-byte languages, this is easy: Just do a GetControlTitle() for
  1783. each of the controls in the dialog (doing a GetDialogItem() to get the
  1784. control handles) and then compare the keystroke with the first character
  1785. of the control title. Use the same method you do for command-period to
  1786. make sure that you get the correct ASCII character code, and then make
  1787. sure to use the CompareText() or IdenticalText() routines so that case and
  1788. diacriticals are handled properly.
  1789.  
  1790. For double-byte languages, you're going to have a problem since the
  1791. character codes for a single character are going to come through in two
  1792. events. In this case, you could get really cute and force the keyboard to
  1793. something that will produce single-bytes only (like Romanji in Japanese)
  1794. and then Transliterate() the names of the buttons and compare the first
  1795. character, but I think this gets a little absurd. Personally, if the
  1796. current font for the buttons (i.e. the system font or the window font of
  1797. your dialog if the buttons are useWFont) is a double-byte character font,
  1798. I would punt on the "command key for the first letter of the button"
  1799. method.
  1800.  
  1801. pr
  1802. -- 
  1803. Pete Resnick    (...so what is a mojo, and why would one be rising?)
  1804. Doctoral Student - Philosophy Department, Gregory Hall, UIUC
  1805. System manager - Cognitive Science Group, Beckman Institute, UIUC
  1806. Internet: resnick@uiuc.edu
  1807.  
  1808. +++++++++++++++++++++++++++
  1809.  
  1810. >From bb@lightside.com (Bob Bradley)
  1811. Date: Sun, 18 Sep 1994 14:19:30 -0800
  1812. Organization: SS Software Inc.
  1813.  
  1814. In article <resnick-1909942338050001@resnick1.isdn.uiuc.edu>,
  1815. resnick@uiuc.edu (Pete Resnick) wrote:
  1816.  
  1817. > For single-byte languages, this is easy: Just do a GetControlTitle() for
  1818. > each of the controls in the dialog (doing a GetDialogItem() to get the
  1819. > control handles) and then compare the keystroke with the first character
  1820. > of the control title. Use the same method you do for command-period to
  1821. > make sure that you get the correct ASCII character code, and then make
  1822. > sure to use the CompareText() or IdenticalText() routines so that case and
  1823. > diacriticals are handled properly.
  1824. > For double-byte languages, you're going to have a problem since the
  1825. > character codes for a single character are going to come through in two
  1826. > events. In this case, you could get really cute and force the keyboard to
  1827. > something that will produce single-bytes only (like Romanji in Japanese)
  1828. > and then Transliterate() the names of the buttons and compare the first
  1829. > character, but I think this gets a little absurd. Personally, if the
  1830. > current font for the buttons (i.e. the system font or the window font of
  1831. > your dialog if the buttons are useWFont) is a double-byte character font,
  1832. > I would punt on the "command key for the first letter of the button"
  1833. > method.
  1834.  
  1835. I'd like to figure out a good method for storing the command-keys in a
  1836. resource which I could pull out later since a few of the button
  1837. command-keys I want to use are not the same as the first letter of the
  1838. button (ie. Add is usually command-G).
  1839.  
  1840. Is there anyway to tell if, when a double-byte script is installed the
  1841. user types the first half of a double-byte character? If so, I could
  1842. detect this, store the first half and if the second half comes thru in the
  1843. next event, do my compare as I would with a regular key.
  1844.  
  1845. I'd like to store the command-keys as a string resource with each key as
  1846. an individual string with the string id (index if in a STR# resource)
  1847. relating the particular button. Could I just compare the key entered with
  1848. the key stored in the string to see if they are equal or would I have to
  1849. use a special Script Manager comparison routine?
  1850.  
  1851. +++++++++++++++++++++++++++
  1852.  
  1853. >From ari@world.std.com (Ari I Halberstadt)
  1854. Date: Wed, 21 Sep 1994 04:19:44 GMT
  1855. Organization: The World Public Access UNIX, Brookline, MA
  1856.  
  1857. In article <resnick-1909942338050001@resnick1.isdn.uiuc.edu>,
  1858. Pete Resnick <resnick@uiuc.edu> wrote:
  1859. >In article <bb-1809941054400001@user53.lightside.com>, bb@lightside.com
  1860. >(Bob Bradley) wrote:
  1861. >
  1862. >> I have a simple dialog for "Don't Save, "Cancel", "Save" and want to
  1863. >> handle commands keys for the dialog correctly. Right now, I'm just
  1864. >> checking for 'D', Escape or Command Period (I am doing international
  1865. >> canceling), and Return or Enter, respectively but, I know there's a better
  1866. >> way.
  1867. >>...
  1868. >For single-byte languages, this is easy: Just do a GetControlTitle() for
  1869. >each of the controls in the dialog (doing a GetDialogItem() to get the
  1870. >control handles) and then compare the keystroke with the first character
  1871. >of the control title. Use the same method you do for command-period to
  1872. >make sure that you get the correct ASCII character code, and then make
  1873. >sure to use the CompareText() or IdenticalText() routines so that case and
  1874. >diacriticals are handled properly.
  1875.  
  1876. A resource that defines equivalence between buttons and command keys.
  1877. Use some special resource type, say "CMDK" or "DLCK" (dialog command
  1878. key), or whatever, and give it the same ID as the dialog or alert. Or
  1879. a <clover><char> syntax you tack onto the end of the button names,
  1880. then extract before displaying the dialog or alert. Other languages
  1881. might not have unique first-character button names, and you might not
  1882. want command key equivalence for some buttons, etc. so storing it in
  1883. the resource data is more flexible.
  1884. -- 
  1885. Ari Halberstadt                                 ari@world.std.com
  1886. One generation passes away, and another generation comes: but the
  1887. earth abides for ever. -- Ecclesiastes, 1:4.
  1888.  
  1889. +++++++++++++++++++++++++++
  1890.  
  1891. >From lalonde@metrowerks.ca (Paul Lalonde)
  1892. Date: Thu, 22 Sep 1994 23:46:20 GMT
  1893. Organization: Metrowerks
  1894.  
  1895. In article <bb-1809941054400001@user53.lightside.com>, bb@lightside.com
  1896. (Bob Bradley) wrote:
  1897.  
  1898. > I have a simple dialog for "Don't Save, "Cancel", "Save" and want to
  1899. > handle commands keys for the dialog correctly. Right now, I'm just
  1900. > checking for 'D', Escape or Command Period (I am doing international
  1901. > canceling), and Return or Enter, respectively but, I know there's a better
  1902. > way.
  1903. > I'd like to make the code localizable and to also get rid of data (the raw
  1904. > 'D' letter, etc..) from the source code (so I don't have t re-compile to
  1905. > change it).
  1906. > How would I go about this? I assume it would all be thru the use of the
  1907. > Script Manager but, I'm not sure on the implementation.
  1908.  
  1909. You would basically need a modal dialog filter proc in which, every time 
  1910. a key down was received with the command key down, you loop through all of 
  1911. the items in the dialog's item list.  If an item is a button, you retrieve 
  1912. its title and compare the first character with the character just pressed.
  1913.  
  1914. Of course, if you also want to deal with double-byte systems, you need to 
  1915. store state information between calls to the filter proc so you will know 
  1916. if a key corresponds to the first or second byte of a character.
  1917.  
  1918. Paul Lalonde
  1919. lalonde@metrowerks.ca
  1920.  
  1921. +++++++++++++++++++++++++++
  1922.  
  1923. >From bb@lightside.com (Bob Bradley)
  1924. Date: Wed, 21 Sep 1994 16:21:17 -0800
  1925. Organization: SS Software Inc.
  1926.  
  1927. In article <lalonde-2209941946200001@slip68.dialup.mcgill.ca>,
  1928. lalonde@metrowerks.ca (Paul Lalonde) wrote:
  1929.  
  1930. > You would basically need a modal dialog filter proc in which, every time 
  1931. > a key down was received with the command key down, you loop through all of 
  1932. > the items in the dialog's item list.  If an item is a button, you retrieve 
  1933. > its title and compare the first character with the character just pressed.
  1934. > Of course, if you also want to deal with double-byte systems, you need to 
  1935. > store state information between calls to the filter proc so you will know 
  1936. > if a key corresponds to the first or second byte of a character.
  1937.  
  1938. The way I'm doing it now is to create a key item command table when the
  1939. dialog is create based on a custom resource that contains the key (just a
  1940. 2 byte short), the item it goes with, and which modifiers are required
  1941. (ie. command, option, control) then when I get a key down, in my proc to
  1942. handle key downs in dialogs (they are all modeless) I search the table for
  1943. the typed key and check whether or not the correct modifiers were down
  1944. when it was pressed (I also use the method in the Tech Note International
  1945. Canceling to work with keyboards that discharge the shift key when the
  1946. command key is down). I also made a simple Resorcerer template for
  1947. creating and editing the key item command table
  1948.  
  1949. It seems to work ok but, I haven't tested it with any non-roman scripts.
  1950.  
  1951. ---------------------------
  1952.  
  1953. >From gpointer@guest.adelaide.edu.au (Geoff Pointer)
  1954. Subject: XCMD memory residence
  1955. Date: 19 Sep 1994 10:50:46 GMT
  1956. Organization: Individual
  1957.  
  1958.    I am trying to manage an external window for Hypercard. It is geared
  1959. to handle several windows open at once and I have handled the fact that
  1960. all windows will be using the same copy of the XCMD code. What I am not
  1961. clear about, is what can happen to the code resource in between event
  1962. calls. I am aware that it can be moved in memory but can it ever be
  1963. purged? I am presently basing my logic on the code not being purged and
  1964. being copied from its original location in memory when it is moved rather
  1965. than recopied from the original resource. Is it possible to get definitive
  1966. answers??
  1967.    My problem involves how I use certain globals (via A4, I use Code
  1968. Warrior). I use RefCon stuff for the globals that go with each individual
  1969. window, but I need special action for the first window open and the last
  1970. window closed, which involves retaining knowledge across individual event
  1971. calls.
  1972.  
  1973. - --------- Cheers - Geoff %^> ----------
  1974.  
  1975.   Voice: 61 8 362 9890     63 Lambert Rd
  1976.   Fax:   61 8 363 2682     Joslin SA 5070
  1977.                            Australia
  1978.  
  1979. - ---------------------------------------
  1980.  
  1981.  
  1982. +++++++++++++++++++++++++++
  1983.  
  1984. >From e-baumgartner@nwu.edu (Eric Baumgartner)
  1985. Date: Mon, 19 Sep 1994 16:27:53 -0500
  1986. Organization: Northwestern University
  1987.  
  1988. In article <35jqe6$qgt@quandong.itd.adelaide.edu.au>,
  1989. gpointer@guest.adelaide.edu.au (Geoff Pointer) wrote:
  1990.  
  1991. > all windows will be using the same copy of the XCMD code. What I am not
  1992. > clear about, is what can happen to the code resource in between event
  1993. > calls. I am aware that it can be moved in memory but can it ever be
  1994. > purged?
  1995.  
  1996. >    My problem involves how I use certain globals (via A4, I use Code
  1997. > Warrior). I use RefCon stuff for the globals that go with each individual
  1998. > window, but I need special action for the first window open and the last
  1999. > window closed, which involves retaining knowledge across individual event
  2000. > calls.
  2001.  
  2002. Yes, your xcmd can be purged in between event calls. If you want to use
  2003. "global globals" I know of two options:
  2004.  
  2005. 1. Tell HC that you have interrupt code by calling XWHasInterruptCode.
  2006. Evil, evil, evil, but it'll keep your code resource resident and locked.
  2007. 2. Use a HC global to store your globals. You could store the address of a
  2008. handle containing the globals, or you could store the globals themselves
  2009. in text form in the HC variable.
  2010.  
  2011. I'd be curious to hear if anyone has any other suggestions.
  2012.  
  2013. Eric Baumgartner                       *   Email: e-baumgartner@nwu.edu
  2014. Learning Sciences                      *   Phone: 708/467-2816
  2015. School of Education and Social Policy  *
  2016. Northwestern University                *
  2017.  
  2018. +++++++++++++++++++++++++++
  2019.  
  2020. >From ari@world.std.com (Ari I Halberstadt)
  2021. Date: Tue, 20 Sep 1994 01:01:20 GMT
  2022. Organization: The World Public Access UNIX, Brookline, MA
  2023.  
  2024. In article <35jqe6$qgt@quandong.itd.adelaide.edu.au>,
  2025. Geoff Pointer <gpointer@guest.adelaide.edu.au> wrote:
  2026. >   I am trying to manage an external window for Hypercard. It is geared
  2027. >to handle several windows open at once and I have handled the fact that
  2028. >all windows will be using the same copy of the XCMD code. What I am not
  2029. >clear about, is what can happen to the code resource in between event
  2030. >calls. I am aware that it can be moved in memory but can it ever be
  2031. >purged? I am presently basing my logic on the code not being purged and
  2032. >being copied from its original location in memory when it is moved rather
  2033. >than recopied from the original resource. Is it possible to get definitive
  2034. >answers??
  2035. >   My problem involves how I use certain globals (via A4, I use Code
  2036. >Warrior). I use RefCon stuff for the globals that go with each individual
  2037. >window, but I need special action for the first window open and the last
  2038. >window closed, which involves retaining knowledge across individual event
  2039. >calls.
  2040. >
  2041.  
  2042. You can mark the XCMD resource as non-purgeable. But that still
  2043. doesn't prevent HyperCard, or anyone else, from explicitely purging
  2044. it. Better to set a HyperCard global variable from within your XCMD.
  2045. There are a couple of call-backs for setting and retrieving a global
  2046. variable's value. When your XCMD exits, it sets the value of the
  2047. global to a handle to some structure containing the state information.
  2048. When the last window is disposed of, you clear the global (set it to
  2049. the empty string). You should give the global some unlikely name. For
  2050. instance, if the XCMD is called "MyXCMD", I'd call the global
  2051. "gMyXCMD". The "g" is just that Apple pseudo-standard for global
  2052. variables, and the "MyXCMD" part makes it clear to anyone looking at
  2053. the global in the debugger that it's part of your XCMD, and also
  2054. reduces the chance that someone will use the same name for their own
  2055. global variable.
  2056. -- 
  2057. Ari Halberstadt                                 ari@world.std.com
  2058. One generation passes away, and another generation comes: but the
  2059. earth abides for ever. -- Ecclesiastes, 1:4.
  2060.  
  2061. +++++++++++++++++++++++++++
  2062.  
  2063. >From jkc@apple.com (John Kevin Calhoun)
  2064. Date: 22 Sep 1994 16:45:21 -0700
  2065. Organization: Apple Computer Inc, Cupertino, CA
  2066.  
  2067.  
  2068. In article <35jqe6$qgt@quandong.itd.adelaide.edu.au>,
  2069. Geoff Pointer <gpointer@guest.adelaide.edu.au> wrote:
  2070. >   I am trying to manage an external window for Hypercard. It is geared
  2071. >to handle several windows open at once and I have handled the fact that
  2072. >all windows will be using the same copy of the XCMD code. What I am not
  2073. >clear about, is what can happen to the code resource in between event
  2074. >calls. I am aware that it can be moved in memory but can it ever be
  2075. >purged? I am presently basing my logic on the code not being purged and
  2076. >being copied from its original location in memory when it is moved rather
  2077. >than recopied from the original resource. Is it possible to get definitive
  2078. >answers??
  2079.  
  2080. It's not possible to prevent an XCMD or XFCN resource from being purged
  2081. unless you also prevent it from being moved.  You can do this with
  2082. the callback XWHasInterruptCode, which, in effect, locks the resource
  2083. in memory.  However, leaving something locked in an unpredictable
  2084. location in HyperCard's heap is a very unfriendly thing to do, unless
  2085. it's absolutely necessary.
  2086.  
  2087. Furthermore, Apple does not guarantee that HyperCard's handling of
  2088. XCMD and XFCN resources will remain the same with each release of
  2089. HyperCard; in fact, it changed between 1.x and 2.x and might change
  2090. again.  Therefore I think it's not wise to rely on the way HyperCard
  2091. currently executes external code.
  2092.  
  2093. >   My problem involves how I use certain globals (via A4, I use Code
  2094. >Warrior). I use RefCon stuff for the globals that go with each individual
  2095. >window, but I need special action for the first window open and the last
  2096. >window closed, which involves retaining knowledge across individual event
  2097. >calls.
  2098.  
  2099. Instead of relying on A4 globals, you can store and update a count
  2100. of your windows in a HyperTalk global, which you can access via the
  2101. SetGlobal and GetGlobal callbacks.
  2102.  
  2103. With HyperCard 2.2, it's possible to count your windows on the fly,
  2104. as follows:
  2105.  
  2106.   function countWindowsOf externalName
  2107.     put 0 into count
  2108.     repeat with thisWindow = 1 to the number of windows
  2109.       if the owner of window thisWindow is externalName
  2110.       then add 1 to count
  2111.     end repeat
  2112.     return count
  2113.   end countWindowsOf
  2114.  
  2115. >From an external you could execute similar HyperTalk code by
  2116. using the RunHandler callback.
  2117.  
  2118. Kevin Calhoun
  2119. jkc@apple.com
  2120.  
  2121. ---------------------------
  2122.  
  2123. End of C.S.M.P. Digest
  2124. **********************
  2125.  
  2126.  
  2127.  
  2128.